package main

import (
	"bytes"
	"encoding/json"
	"fmt"
)

type Stu struct {
	Id    int64   `json:"id,string"`
	Score float64 `json:"score,string"`
}

/*
反序列化前后   int  变成  float64


*/
func jsonDemo() {

	x := make(map[string]interface{})
	x["age"] = 20 //
	fmt.Printf("反序列化前的类型 ：%T\n", x["age"])
	b, err := json.Marshal(&x)
	if err != nil {
		fmt.Println("json marshal failed", err)
		return
	}
	// 使用 decode 转换 json.Number,  在转换 int
	var x1 map[string]interface{}
	decoder := json.NewDecoder(bytes.NewReader(b))
	decoder.UseNumber()
	err = decoder.Decode(&x1)
	if err != nil {
		fmt.Printf("unmarshal failed, err:%v\n", err)
		return
	}
	age, err := x1["age"].(json.Number).Int64()
	if err != nil {
		fmt.Println("parse to int64 failed,err:\n", err)
	}

	fmt.Printf("反序列化后的类型 ：%T\n", x1["age"])
	fmt.Printf("type: %T\n", int(age))
}
func main() {
	jsonStr1 := `{"id": "1234567","score": "88.50"}`
	var s Stu
	if err := json.Unmarshal([]byte(jsonStr1), &s); err != nil {
		fmt.Println("unmarshal json string failed", err)
		return
	}
	fmt.Printf("%v\n", s.Id)

	jsonDemo()

}
